草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

c++ - 具有类型删除析构函数的 unique_ptr 不太有效(有警告)

有一个不错的小技巧here允许使用std::unique_ptr不完整的类型。相关代码如下://File:erasedptr.h#include#include//typeeraseddeletor(animplementationtypeusing"veneer")templatestructErasedDeleter:std::function{ErasedDeleter():std::function([](T*p){deletep;}){}};//Aunique_ptrtypedeftemplateusingErasedPtr=std::unique_ptr>;//Declar

c++ - std::queue 析构函数慢得要死,bug?

关闭。这个问题需要debuggingdetails.它目前不接受答案。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。关闭6年前。Improvethisquestion为什么std::queue中的析构函数非常慢?看看我的例子:voidtest(){inttotal=17173512;std::queueq;for(inti=0;istd::vector中的析构函数非常快...更新:我的编译器/IDE是VisualSt

c++ - 为满足条件的类专门化 `std::hash`

假设我有一个简单的bool特征类,MyTrait.也就是说,对于任何类型T,我能做到MyTrait::value并得到true或false。我想专攻std::hash适用于所有类型T其中MyTrait::value是真的。有什么办法吗?一些失败的尝试:template::value,int>::type=0>structhash{...}失败是因为:error:defaulttemplateargumentinaclasstemplatepartialspecialization我还尝试将所有部分特化的东西放在散列之后,但随后出现了T的错误消息处于非推导上下文中。有什么办法吗?至少之前

c++ - 如何从以 shared_ptr 为键的 unordered_set 中获取基于 raw_ptr 的元素

我想知道是否有办法根据unordered_set的原始指针检索一个元素,该元素以shared_ptr为键。unordered_set>sets;automyobj=make_shared();sets.insert(myobj);//Findtheelementmyobjsets.find(myobj);//Howtofindtheelementbasedontheunderlyingrawpointer?sets.find(my.obj.get());(my.obj.get())); 最佳答案 要仅使用底层原始指针查找您要查找的内

c++ - Boost.asio 和异步链,unique_ptr?

我对异步编程不是很熟悉,我有一个问题。我的问题如下。给定boost.asio中C++11的echo_server示例:http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp我想知道std::make_shared可以在C++14中替换为std::unique_ptr在C++14中,避免了引用计数的开销。我不确定,因为我们有shared_from_this()但不是像unique_from_this()这样的东西,那么我怎样才能访问unique_ptr从里面t

c++ - std::nothrow 未按预期工作 - 条件始终为假

#includeintmain(){int*xx=new(std::nothrow)int[2];if(xx==NULL){exit(1);}return0;}我正在尝试使用nothrow,但是clion说关于xx==NULL“条件始终为假”,以及关于exit(1)那个“无法访问的代码”。我做错了什么? 最佳答案 这是CLion中的错误-CPP-989 关于c++-std::nothrow未按预期工作-条件始终为假,我们在StackOverflow上找到一个类似的问题:

c++ - std::cout 在具有静态存储持续时间的对象的构造函数中的使用

在C++98/C++03中具有静态存储持续时间的对象的构造函数中使用std::cout是否安全?从这个看来answer它不是,但它不包含标准中的任何引用。只有在C++11和C++14中才安全吗? 最佳答案 来自C++14(N3797),§27.4p2:Theobjectsareconstructedandtheassociationsareestablishedatsometimepriortoorduringthefirsttimeanobjectofclassios_base::Initisconstructed,andinan

c++ - 使用 std::aligned_union 和 std::aligned_union 为小型缓冲区优化别名

我正在研究std::function的小缓冲区优化实现-像对象。Boost实现了boost::function的小缓冲区像这样:unionfunction_buffer{mutablevoid*obj_ptr;structtype_t{constdetail::sp_typeinfo*type;boolconst_qualified;boolvolatile_qualified;}type;mutablevoid(*func_ptr)();structbound_memfunc_ptr_t{void(X::*memfunc_ptr)(int);void*obj_ptr;}bound_m

c++ - 从非常大的范围返回非重复的随机值

我想要一个函数,它可以从一组n个整数(0到n-1)中产生k个伪随机值,而不重复任何先前的结果。k小于或等于n。O(n)内存是NotAcceptable因为n的大小很大以及我需要重新洗牌的频率。这些是我到目前为止考虑过的方法:数组:通常,如果我想要无重复的随机值,我会打乱一个数组,但那是O(n)内存。n可能太大而无法工作。longnextvalue(void){staticlongarray[4000000000];staticints=0;if(s==0){for(inti=0;in态PRNG:有多种随机数生成器可以设计为具有n的周期。并访问n那个时期的独特状态。最简单的例子是:lon

c++ - 在C/C++中使用stdio文件操作时如何检测磁盘空间不足?

我正在做一个小程序如下:voidreserve_file_space(char*file_path,size_tamount){FILE*fp=fopen(file_path,"w+b");if(!fp){printf("couldnotcreateanewfile\n");return;}intfseek_ret=fseek(fp,amount,SEEK_SET);if(fseek_ret!=0){printf("couldnotseektothedesiredposition\n");fclose(fp);return;}chargarbage=1;size_tret=fwrite